package com.peakmain.wanandroid.netmodule.net;

import com.peakmain.wanandroid.netmodule.bean.DataResponse;
import com.peakmain.wanandroid.netmodule.bean.PublicAccountBean;
import com.peakmain.wanandroid.netmodule.bean.PublicAccountListBean;
import com.peakmain.wanandroid.netmodule.bean.gank.GankBaseBean;
import com.peakmain.wanandroid.netmodule.bean.gank.GankImageBean;
import com.peakmain.wanandroid.netmodule.bean.home.HomeArticleBean;
import com.peakmain.wanandroid.netmodule.bean.home.HomeBannerBean;
import com.peakmain.wanandroid.netmodule.bean.home.HomeFriendBean;
import com.peakmain.wanandroid.netmodule.bean.home.HomeTopArticleBean;
import com.peakmain.wanandroid.netmodule.bean.home.HotkeyBean;
import com.peakmain.wanandroid.netmodule.bean.home.SearchResultBean;
import com.peakmain.wanandroid.netmodule.bean.project.ProjectListBean;
import com.peakmain.wanandroid.netmodule.bean.project.ProjectTreeBean;
import com.peakmain.wanandroid.netmodule.bean.system.SystemListBean;
import com.peakmain.wanandroid.netmodule.bean.system.SystemTreeBean;

import java.util.List;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * author: peakmain
 * createdata：2019/7/10
 * mail: 2726449200@qq.com
 * desiption: 用来存放接口
 */
public interface ApiService {
    /**
     * 登录接口
     * https://www.wanandroid.com/user/login
     *
     * @param username 用户名
     * @param password 密码
     * @return 返回结果
     */
    @POST("/user/login")
    @FormUrlEncoded
    Observable<DataResponse> login(@Field("username") String username, @Field("password") String password);

    /**
     * 注册用户的方法
     * https://www.wanandroid.com/user/register
     *
     * @param username   用户名
     * @param password   密码
     * @param repassword 确认密码
     * @return 返回结果
     */
    @POST("/user/register")
    @FormUrlEncoded
    Observable<DataResponse> register(@Field("username") String username, @Field("password") String password, @Field("repassword") String repassword);

    /**
     * 项目分类
     */
    @GET("/project/tree/json")
    Observable<DataResponse<List<ProjectTreeBean>>> getProjectTree();

    /**
     * 项目列表数据
     */
    @GET("/project/list/{page}/json")
    Observable<DataResponse<ProjectListBean>> getProjectList(@Path("page") int page,
                                                             @Query("cid") int cid);

    /**
     * 体系分类
     */
    @GET("/tree/json")
    Observable<DataResponse<List<SystemTreeBean>>> getSystemTree();

    /**
     * 体系列表数据
     */
    @GET("/article/list/{page}/json")
    Observable<DataResponse<SystemListBean>> getSystemList(@Path("page") int page,
                                                           @Query("cid") int cid);

    /**
     * 首页文章列表数据
     */
    @GET("/article/list/{page}/json")
    Observable<DataResponse<HomeArticleBean>> getHomeArticle(@Path("page") int page);

    /**
     * 首页置顶文章列表数据
     */
    @GET("/article/top/json")
    Observable<DataResponse<List<HomeTopArticleBean>>> getHomeTopArticle();

    /**
     * 首页轮播
     */
    @GET("/banner/json")
    Observable<DataResponse<List<HomeBannerBean>>> getHomeBanner();

    @GET("/user/logout/json")
    Observable<DataResponse> logout();

    @GET("/hotkey/json")
    Observable<DataResponse<List<HotkeyBean>>> getHotkey();

    /**
     * 搜索
     */

    @POST("/article/query/{page}/json")
    @FormUrlEncoded
    Observable<DataResponse<SearchResultBean>> getSearch(@Path("page") int page,
                                                         @Field("k") String key);

    @GET("/friend/json")
    Observable<DataResponse<List<HomeFriendBean>>> getFriendData();

    /**
     * 获取公众号列表
     */
    @GET("/wxarticle/chapters/json")
    Observable<DataResponse<List<PublicAccountListBean>>> getPublicAccountList();

    @GET("/wxarticle/list/{id}/{page}/json")
    Observable<DataResponse<PublicAccountBean>> getPublicAccountData(@Path("id") int id, @Path("page") int page);

    @GET("/wxarticle/list/{id}/{page}/json")
    Observable<DataResponse<PublicAccountBean>> getPublicAccountSearchData(@Path("id") int id,
                                                                           @Path("page") int page, @Query("k") String key);


    /*_____________________________________干货集中营____________________________________________*/

    @GET("random/data/{category}/{count}")
    Observable<GankBaseBean<List<GankImageBean>>> getGankImageData(@Path("category") String category, @Path("count") int count);
}
